package k1_exercise;

import java.util.Arrays;

public class Array_bubbleSort {
    /**
     * 冒泡排序
     */
    public static void main(String[] args) {

        //给定原始乱序的数组
        int[] nums = {5,3,9,6,2,7,10,2,3,8,4};
        //初始化临时变量，用于后面做元素交换
        int tmp = 0;
        //可以做优化的标识
        boolean flag;

        //这层循环的目的只是确定执行次数，这里的i不参与比较
        for (int i = 0; i < nums.length-1; i++) {
            //每次遍历都把flag置为true
            flag = true;
            //这层循环的目的是比较当前位置元素和它后一位元素的大小
            for (int j = 0; j < nums.length-1-i; j++) {
                //如果当前元素比后一个元素大，则交换数据;如果倒序则相反
                if (nums[j]>nums[j+1]) {
                    //交换数据，向上冒泡
                    tmp = nums[j];
                    nums[j] = nums[j+1];
                    nums[j+1] = tmp;
                    //如果交换过数据，把标识置为false
                    flag = false;
                }
            }
            //做优化使用，如果第一次执行就没有任何交换
            //代表原数组本来就是有序的，直接break就ok
            if(flag){
                break;
            }
        }
        //输出结果
        System.out.println(Arrays.toString(nums));

    }
}
